package GUI.Visualizacion;

import java.awt.*;
import java.awt.event.*;

import javax.swing.*;
import java.awt.image.*;
//import lp2.juego.simulacion.base.*;
//import lp2.juego.simulacion.produccion.ClothesFactory;
//import lp2.juego.simulacion.produccion.CocaLoca;
//import lp2.juego.simulacion.produccion.Produccion;
//import lp2.juego.simulacion.vida.Apartament;
//import lp2.juego.simulacion.vida.Cine4D;
//import lp2.juego.simulacion.vida.ElTizonBar;
//import lp2.juego.simulacion.vida.House;
import BL.BLAlmacen;
import java.util.List;
import BE.BENodo;

public class GestorDibujo {

    Ventana principal;
    private static BufferStrategy bf;
//    private Ciudad ciudad;
    private Integer posPunteroX;
    private Integer posPunteroY;
//    private HiloAnimacion hanim;
//    private HiloTurno hturno;
//    private Monitor monitor;
    private BLAlmacen blAlmacen;
    private List<BENodo> ruta = null;

    class miListener extends MouseAdapter implements MouseListener {

        private int x = 0, y = 0;

        public
        @Override
        void mouseDragged(MouseEvent e) {
            if (x == 0) {
                x = e.getX();
            }
            if (y == 0) {
                y = e.getY();
            }
            if (principal.getEscMapa().getDx() + x - e.getX() >= 0
                    && principal.getEscMapa().getDx() + x - e.getX() <= blAlmacen.getAncho() * Escenario.ANCHO_IMAGEN - principal.getEscMapa().getWidth()) {
                principal.getEscMapa().setDx(principal.getEscMapa().getDx() + x - e.getX());
                principal.getGhGrillaHorizontal().setDx(principal.getGhGrillaHorizontal().getDx() + x - e.getX());
            }
            if (principal.getEscMapa().getDy() + y - e.getY() >= 0
                    && principal.getEscMapa().getDy() + y - e.getY() <= blAlmacen.getLargo() * Escenario.ALTO_IMAGEN - principal.getEscMapa().getHeight()) {
                principal.getEscMapa().setDy(principal.getEscMapa().getDy() + y - e.getY());
                principal.getGvGrillaVertical().setDy(principal.getGvGrillaVertical().getDy() + y - e.getY());
            }
            x = e.getX();
            y = e.getY();
            
            actualizaBackBuffer();            
        }

        public
        @Override
        void mouseReleased(MouseEvent e) {
            x = 0;
            y = 0;

        }

        public
        @Override
        void mouseMoved(MouseEvent e) {
            Integer auxX;
            Integer auxY;
            auxX = (e.getX() + principal.getEscMapa().getDx()) / Escenario.ANCHO_IMAGEN + 1;
            auxY = (e.getY() + principal.getEscMapa().getDy()) / Escenario.ALTO_IMAGEN + 1;
            posPunteroX = auxX - 1;
            posPunteroY = auxY - 1;
            principal.getLblPosicion().setText("Posicion: (" + auxX.toString() + "," + auxY + ")");
        }
    };

    class miPopupListener extends MouseAdapter {

        JPopupMenu popup;

        public @Override void mousePressed(MouseEvent e) {
            if (e.isPopupTrigger()) {
                seteaPopup();
                //monitor.setEjecutable(false);
                popup.show(e.getComponent(), e.getX(), e.getY());
            }
        }

        public @Override void mouseReleased(MouseEvent e) {
            if (e.isPopupTrigger()) {
                seteaPopup();
                //monitor.setEjecutable(false);
                popup.show(e.getComponent(), e.getX(), e.getY());
            }
        }

        public void seteaPopup() {
            popup = new JPopupMenu();
//            if (ciudad.getConstruccionMapa(posPunteroX, posPunteroY) != null) {
//                if (ciudad.getConstruccionMapa(posPunteroX, posPunteroY) instanceof Produccion) {
//                    JMenu mnuContratar = new JMenu("Contratar");
//
//                    JMenuItem mniContratoLargo = new JMenuItem("Contrato Largo");
//                    mniContratoLargo.addMouseListener(new MouseAdapter() {
//
//                        public
//                        @Override
//                        void mouseReleased(MouseEvent e) {
//                            principal.setMensaje("CONTRATAR LARGO " + (posPunteroX + 1) + " " + (posPunteroY + 1));
//                            monitor.regresarTurno();
//                        }
//                    });
//                    mnuContratar.add(mniContratoLargo);
//
//                    JMenuItem mniContratoCorto = new JMenuItem("Contrato Corto");
//                    mniContratoCorto.addMouseListener(new MouseAdapter() {
//
//                        public
//                        @Override
//                        void mouseReleased(MouseEvent e) {
//                            principal.setMensaje("CONTRATAR CORTO " + (posPunteroX + 1) + " " + (posPunteroY + 1));
//                            monitor.regresarTurno();
//                        }
//                    });
//                    mnuContratar.add(mniContratoCorto);
//
//                    popup.add(mnuContratar);
//                }
//                JMenuItem mniVender = new JMenuItem("Vender");
//                mniVender.addMouseListener(new MouseAdapter() {
//
//                    public @Override void mouseReleased(MouseEvent e) {
//                        principal.setMensaje("VENDER " + (posPunteroX + 1) + " " + (posPunteroY + 1));
//                        monitor.regresarTurno();
//                    }
//                });
//
//                popup.add(mniVender);
//            } else {
//                JMenu mnuConstruir = new JMenu("Construir");
//                if (esAdecuado(new Way(), posPunteroX, posPunteroY)) {
//                    JMenuItem mniWay = new JMenuItem("Way");
//                    mniWay.addMouseListener(new MouseAdapter() {
//
//                        public
//                        @Override
//                        void mouseReleased(MouseEvent e) {
//                            principal.setMensaje("CONSTRUIR WAY " + (posPunteroX + 1) + " " + (posPunteroY + 1));
//                            monitor.regresarTurno();
//                        }
//                    });
//                    mnuConstruir.add(mniWay);
//                }
//                if (esAdecuado(new House(), posPunteroX, posPunteroY)) {
//                    JMenuItem mniHouse = new JMenuItem("House");
//                    mniHouse.addMouseListener(new MouseAdapter() {
//
//                        public
//                        @Override
//                        void mouseReleased(MouseEvent e) {
//                            principal.setMensaje("CONSTRUIR HOUSE " + (posPunteroX + 1) + " " + (posPunteroY + 1));
//                            monitor.regresarTurno();
//                        }
//                    });
//                    mnuConstruir.add(mniHouse);
//                }
//                if (esAdecuado(new ClothesFactory(), posPunteroX, posPunteroY)) {
//                    JMenuItem mniClothesFactory = new JMenuItem("Clothes Factory");
//                    mniClothesFactory.addMouseListener(new MouseAdapter() {
//
//                        public
//                        @Override
//                        void mouseReleased(MouseEvent e) {
//                            principal.setMensaje("CONSTRUIR CLOTHESFACTORY " + (posPunteroX + 1) + " " + (posPunteroY + 1));
//                            monitor.regresarTurno();
//                        }
//                    });
//                    mnuConstruir.add(mniClothesFactory);
//                }
//                if (esAdecuado(new Apartament(), posPunteroX, posPunteroY)) {
//                    JMenuItem mniApartment = new JMenuItem("Apartment");
//                    mniApartment.addMouseListener(new MouseAdapter() {
//
//                        public
//                        @Override
//                        void mouseReleased(MouseEvent e) {
//                            principal.setMensaje("CONSTRUIR APARTMENT " + (posPunteroX + 1) + " " + (posPunteroY + 1));
//                            monitor.regresarTurno();
//                        }
//                    });
//                    mnuConstruir.add(mniApartment);
//                }
//                if (esAdecuado(new CocaLoca(), posPunteroX, posPunteroY)) {
//                    JMenuItem mniCocaLoca = new JMenuItem("Coca Loca");
//                    mniCocaLoca.addMouseListener(new MouseAdapter() {
//
//                        public
//                        @Override
//                        void mouseReleased(MouseEvent e) {
//                            principal.setMensaje("CONSTRUIR COCALOCA " + (posPunteroX + 1) + " " + (posPunteroY + 1));
//                            monitor.regresarTurno();
//                        }
//                    });
//                    mnuConstruir.add(mniCocaLoca);
//                }
//                if (esAdecuado(new ElTizonBar(), posPunteroX, posPunteroY)) {
//                    JMenuItem mniElTizonBar = new JMenuItem("El Tizon Bar");
//                    mniElTizonBar.addMouseListener(new MouseAdapter() {
//
//                        public
//                        @Override
//                        void mouseReleased(MouseEvent e) {
//                            principal.setMensaje("CONSTRUIR ELTIZONBAR " + (posPunteroX + 1) + " " + (posPunteroY + 1));
//                            monitor.regresarTurno();
//                        }
//                    });
//                    mnuConstruir.add(mniElTizonBar);
//                }
//                if (esAdecuado(new Cine4D(), posPunteroX, posPunteroY)) {
//                    JMenuItem mniCine4D = new JMenuItem("Cine 4D");
//                    mniCine4D.addMouseListener(new MouseAdapter() {
//
//                        public
//                        @Override
//                        void mouseReleased(MouseEvent e) {
//                            principal.setMensaje("CONSTRUIR CINE4D " + (posPunteroX + 1) + " " + (posPunteroY + 1));
//                            monitor.regresarTurno();
//                        }
//                    });
//                    mnuConstruir.add(mniCine4D);
//                }
//                popup.add(mnuConstruir);
//            }

        }

//        private boolean esAdecuado(Construccion nuevaConstruccion, int x, int y) {
//            if (ciudad.getDineroActual() < nuevaConstruccion.getCosto()) {
//                return false;
//            }
//            if (!coordenadasAdecuadas(nuevaConstruccion, x, y)) {
//                return false;
//            }
//            if (!terrenoAdecuado(nuevaConstruccion, x, y)) {
//                return false;
//            }
//            if (!hayComunicacionProxima(nuevaConstruccion, x, y)) {
//                return false;
//            }
//            return true;
//        }

//        private boolean coordenadasAdecuadas(Construccion nuevaConstruccion, int x, int y) {
//            if ((x < 0) || (x > Ciudad.ANCHO_MAPA - 1)) {
//                //JOptionPane.showMessageDialog(principal,"Coordenada X Fuera del Mapa");
//                return false;
//            }
//            if ((x + nuevaConstruccion.getAncho() - 1) > Ciudad.ANCHO_MAPA - 1) {
//                JOptionPane.showMessageDialog(principal, "Construcción Excedería Límites del Mapa");
//                return false;
//            }
//            if ((y < 0) || (y > Ciudad.ALTO_MAPA - 1)) {
//                //JOptionPane.showMessageDialog(principal,"Coordenada Y Fuera del Mapa");
//                return false;
//            }
//            if (y + nuevaConstruccion.getAlto() - 1 > Ciudad.ALTO_MAPA - 1) {
//                JOptionPane.showMessageDialog(principal, "Construcción Excedería Límites del Mapa");
//                return false;
//            }
//            return true;
//        }

//        private boolean terrenoAdecuado(Construccion nuevaConstruccion, int x, int y) {
//            for (int i = 0; i < nuevaConstruccion.getAncho(); i++) {
//                for (int j = 0; j < nuevaConstruccion.getAlto(); j++) {
//                    boolean posicionAdecuada = false;
//                    if (ciudad.getConstruccionMapa(x + i, y + j) != null) {
//                        return false;
//                    }
//                    for (Character c : nuevaConstruccion.getTerrenos()) {
//                        if (c == ciudad.getTerrenoMapa(x + i, y + j).getCaracter()) {
//                            posicionAdecuada = true;
//                            break;
//                        }
//                    }
//                    if (!posicionAdecuada) {
//                        return false;
//                    }
//                }
//            }
//            return true;
//        }

//        private boolean hayComunicacionProxima(Construccion nuevaConstruccion, int x, int y) {
//            if (nuevaConstruccion.getTipoConstruccion() == Construccion.tipoConstruccion.comunicaciones) {
//                return true;
//            }
//            for (int i = x - 1; i < x + nuevaConstruccion.getAncho() + 1; i++) {
//                if ((i >= 0) && (i < Ciudad.ANCHO_MAPA) && ((y - 1) >= 0) && ((y - 1) < Ciudad.ALTO_MAPA)) {
//                    if (ciudad.getConstruccionMapa(i, y - 1) != null) {
//                        if (ciudad.getConstruccionMapa(i, y - 1).getTipoConstruccion() == Construccion.tipoConstruccion.comunicaciones) {
//                            return true;
//                        }
//                    }
//                }
//                if ((i >= 0) && (i < Ciudad.ANCHO_MAPA) && ((y + (nuevaConstruccion.getAlto() - 1) + 1) >= 0) && ((y + (nuevaConstruccion.getAlto() - 1) + 1) < Ciudad.ALTO_MAPA)) {
//                    if (ciudad.getConstruccionMapa(i, y + (nuevaConstruccion.getAlto() - 1) + 1) != null) {
//                        if (ciudad.getConstruccionMapa(i, y + (nuevaConstruccion.getAlto() - 1) + 1).getTipoConstruccion() == Construccion.tipoConstruccion.comunicaciones) {
//                            return true;
//                        }
//                    }
//                }
//            }
//
//            for (int j = y - 1; j < y + nuevaConstruccion.getAlto() + 1; j++) {
//                if (((x - 1) >= 0) && ((x - 1) < Ciudad.ANCHO_MAPA) && (j >= 0) && (j < Ciudad.ALTO_MAPA)) {
//                    if (ciudad.getConstruccionMapa(x - 1, j) != null) {
//                        if (ciudad.getConstruccionMapa(x - 1, j).getTipoConstruccion() == Construccion.tipoConstruccion.comunicaciones) {
//                            return true;
//                        }
//                    }
//                }
//                if (((x + (nuevaConstruccion.getAncho() - 1) + 1) >= 0) && ((x + (nuevaConstruccion.getAncho() - 1) + 1) < Ciudad.ANCHO_MAPA) && (j >= 0) && (j < Ciudad.ALTO_MAPA)) {
//                    if (ciudad.getConstruccionMapa(x + (nuevaConstruccion.getAncho() - 1) + 1, j) != null) {
//                        if (ciudad.getConstruccionMapa(x + (nuevaConstruccion.getAncho() - 1) + 1, j).getTipoConstruccion() == Construccion.tipoConstruccion.comunicaciones) {
//                            return true;
//                        }
//                    }
//                }
//            }
//            return false;
//        }
    };

    public GestorDibujo(Ventana principal, List<BENodo> ruta/*, Ciudad ciudad ,Monitor monitor*/) {
        //this.ciudad = ciudad;
        this.principal = principal;
        blAlmacen = new BLAlmacen();
        //this.monitor=monitor;
        if (ruta!=null){
            this.ruta=ruta;
        }
        inicializaVentana();
    }

    
    private void modificaConstraints(GridBagConstraints constraints,
            int x, int y, int width, int height,
            int fill, double weightx, double weighty) {
        constraints.gridx = x;
        constraints.gridy = y;
        constraints.gridwidth = width;
        constraints.gridheight = height;
        constraints.fill = fill;
        constraints.weightx = weightx;
        constraints.weighty = weighty;
    }

    
    private void inicializaVentana(/*Ciudad ciudad*/) {
        principal.setBounds(50, 50, 1000, 600);
        principal.setTitle("Almacén");
        principal.getContentPane().setBackground(new Color(225, 225, 232));
        principal.getContentPane().setLayout(new GridBagLayout());
        GridBagConstraints constraints = new GridBagConstraints();

        principal.addComponentListener(new ComponentAdapter() {

            public
            @Override
            void componentResized(ComponentEvent e) {
                if (blAlmacen.getLargo() * Escenario.ALTO_IMAGEN - principal.getEscMapa().getDy() < principal.getEscMapa().getHeight()) {
                    principal.getEscMapa().setDy(blAlmacen.getLargo() * Escenario.ALTO_IMAGEN - principal.getEscMapa().getHeight());
                    principal.getGvGrillaVertical().setDy(blAlmacen.getLargo() * Escenario.ALTO_IMAGEN - principal.getEscMapa().getHeight());
                }
                if (blAlmacen.getAncho() * Escenario.ANCHO_IMAGEN - principal.getEscMapa().getDx() < principal.getEscMapa().getWidth()) {
                    principal.getEscMapa().setDx(blAlmacen.getAncho() * Escenario.ANCHO_IMAGEN - principal.getEscMapa().getWidth());
                    principal.getGhGrillaHorizontal().setDx(blAlmacen.getAncho() * Escenario.ANCHO_IMAGEN - principal.getEscMapa().getWidth());
                }
            }
        });


        principal.setMnbBarraMenu(new JMenuBar());
        JMenu mnuFile = new JMenu("File");
//        JMenuItem itemGuardar = new JMenuItem("Guardar");
//
//        itemGuardar.addActionListener(new ActionListener() {
//
//            public void actionPerformed(ActionEvent e) {
//                principal.setMensaje("GUARDAR JUEGO");
//            }
//        });
//
//        JMenuItem itemMostrar = new JMenuItem("Mostrar Construcciones");
//        itemMostrar.addActionListener(new ActionListener() {
//
//            public void actionPerformed(ActionEvent e) {
//                String[] listaConstrucciones = {"APARTMENT",
//                    "HOUSE",
//                    "DORM",
//                    "BUNGALOW",
//                    "BUNKER",
//                    "GHESTHOUSE",
//                    "IGLOO",
//                    "ICEAPARTMENT",
//                    "CLOTHESFACTORY",
//                    "COCALOCA",
//                    "FINTEL",
//                    "FLYINGCARSFACTORY",
//                    "FLYINGHOUSESFACTORY",
//                    "GARBAGECOLLECTOR",
//                    "HOLOGRAMAS",
//                    "MACROSOFT",
//                    "MINA",
//                    "TELETRANSPORTADOR",
//                    "AMUSEMENTPARK",
//                    "CASINO",
//                    "CINE4D",
//                    "ELTIZONBAR",
//                    "LANDCENTERVIRTUALREALITY",
//                    "MALL",
//                    "MCBURGER",
//                    "WAY",
//                    "BRIDGE",
//                    "SALADEJUEGOS",
//                    "PARQUEJUEGOS"};
//
//                String opcionvalida = "ESTA BIEN";
//                String mensaje = "MOSTRARCONSTRUCCIONES ";
//                String aux = null;
//                aux = (String) (JOptionPane.showInputDialog(principal,
//                        "Que Construccion Desea Mostrar?",
//                        "Mostrar Construcciones",
//                        JOptionPane.QUESTION_MESSAGE,
//                        null,
//                        listaConstrucciones,
//                        listaConstrucciones[0]))
//                        + " ";//hasta aqui "mostrarconstrucciones construccion "
//
//                if (aux.equals("null ")) {
//                    opcionvalida = "ESTA MAL";
//                } else {
//                    mensaje = mensaje + aux;
//                }
//                if (opcionvalida.equals("ESTA BIEN")) {
//                    aux = null;
//                    aux = (String) JOptionPane.showInputDialog(principal,
//                            "¿Cuantas?",
//                            "Mostrar Construcciones",
//                            JOptionPane.QUESTION_MESSAGE);
//                    if (aux == null) {
//                        opcionvalida = "ESTA MAL";
//                    } else {
//                        mensaje = mensaje + aux;
//                    }
//                }
//                if (opcionvalida.equals("ESTA BIEN")) {
//                    principal.setMensaje(mensaje);
//                }
//            }
//        });
//
//        JMenuItem itemSalir = new JMenuItem("Salir");
//        itemSalir.addActionListener(new ActionListener() {
//
//            public void actionPerformed(ActionEvent e) {
//                principal.setMensaje("SALIR");
//            }
//        });
//        JMenuItem itemAbrir = new JMenuItem("Abrir");
//        itemAbrir.addActionListener(new ActionListener() {
//
//            public void actionPerformed(ActionEvent e) {
//                principal.setMensaje("ABRIR");
//            }
//        });
//        mnuFile.add(itemGuardar);
//        mnuFile.add(itemAbrir);
//        mnuFile.add(itemMostrar);
//        mnuFile.add(itemSalir);
        principal.getMnbBarraMenu().add(mnuFile);


//        //principal.setMnbBarraMenu(new JMenuBar());
//        JMenu mnuBD = new JMenu("BD");
//        JMenuItem itemGuardarBD = new JMenuItem("Guardar estado");
//        itemGuardarBD.addActionListener(new ActionListener() {
//
//            public void actionPerformed(ActionEvent e) {
//                principal.setMensaje("GUARDAR_ESTADO_BD");
//            }
//        });
//        JMenuItem itemActualizarInfo = new JMenuItem("Actualizar info externa");
//        itemActualizarInfo.addActionListener(new ActionListener() {
//
//            public void actionPerformed(ActionEvent e) {
//                principal.setMensaje("ACTUALIZAR_INFORMACION_EXTERNA");
//            }
//        });
//        mnuBD.add(itemGuardarBD);
//        mnuBD.add(itemActualizarInfo);
//        principal.getMnbBarraMenu().add(mnuBD);
//
//        JMenuItem itemApariencia = new JMenuItem("Apariencia");
//        itemApariencia.addActionListener(new ActionListener() {
//
//            public void actionPerformed(ActionEvent e) {
//
//                JDialog ventApariencia = new JDialog(principal, true);
//                VentanaApariencia panelApariencia = new VentanaApariencia(principal);
//                panelApariencia.setOpaque(true);
//                ventApariencia.setContentPane(panelApariencia);
//                ventApariencia.pack();
//                ventApariencia.setVisible(true);
//
//            }
//        });
//
//        mnuFile.add(itemApariencia);


        modificaConstraints(constraints, 0, 0, 4, 1,
                GridBagConstraints.HORIZONTAL, 1.0, 0.0);
        principal.getContentPane().add(principal.getMnbBarraMenu(), constraints);


        principal.setLblEstado(new JLabel());
        modificaConstraints(constraints, 0, 1, 2, 1,
                GridBagConstraints.LINE_START, 0.0, 0.0);
        principal.getContentPane().add(principal.getLblEstado(), constraints);

        JPanel pnlEsquina = new JPanel() {

            public
            @Override
            void paintComponent(Graphics g) {
                g.drawLine(0, 0, getWidth(), getHeight());
            }
        };


        pnlEsquina.setBackground(new Color(85, 95, 111));
        modificaConstraints(constraints, 0, 2, 1, 1,
                GridBagConstraints.BOTH, 0.0, 0.0);
        constraints.ipadx = 24;
        constraints.ipady = 24;
        principal.getContentPane().add(pnlEsquina, constraints);
        constraints.ipadx = 0;
        constraints.ipady = 0;


        principal.setGhGrillaHorizontal(new GrillaHorizontal());
        modificaConstraints(constraints, 1, 2, 1, 1,
                GridBagConstraints.HORIZONTAL, 0.0, 0.0);
        principal.getGhGrillaHorizontal();
        principal.getContentPane().add(principal.getGhGrillaHorizontal(), constraints);

        JPanel pnlVertiAux = new JPanel();
        pnlVertiAux.setBackground(new Color(225, 225, 232));
        modificaConstraints(constraints, 2, 1, 1, 6,
                GridBagConstraints.BOTH, 1.0, 1);
        principal.getContentPane().add(pnlVertiAux, constraints);

    
//        principal.setPnlInterno(new PanelInterno());
//        principal.getPnlInterno().setBackground(new Color(113, 119, 125));
//        principal.getPnlInterno().setBorder(BorderFactory.createEtchedBorder());
//        modificaConstraints(constraints, 3, 1, 1, 6,
//                GridBagConstraints.BOTH, 15, 1);
//        principal.getContentPane().add(principal.getPnlInterno(), constraints);


        principal.setGvGrillaVertical(new GrillaVertical());
        modificaConstraints(constraints, 0, 3, 1, 1,
                GridBagConstraints.BOTH, 0.0, 0.0);
        principal.getContentPane().add(principal.getGvGrillaVertical(), constraints);



        principal.setEscMapa(new Escenario(this.ruta));
        miListener listenerEscenario = new miListener();
        principal.getEscMapa().addMouseMotionListener(listenerEscenario);
        principal.getEscMapa().addMouseListener(listenerEscenario);
        modificaConstraints(constraints, 1, 3, 1, 1,
                GridBagConstraints.BOTH, 1500.0, 1.0);
        principal.getContentPane().add(principal.getEscMapa(), constraints);

        principal.setLblPosicion(new JLabel("Posicion: (0,0)"));
        modificaConstraints(constraints, 1, 4, 1, 1,
                GridBagConstraints.HORIZONTAL, 1.0, 0.0);
        constraints.anchor = GridBagConstraints.EAST;
        principal.getContentPane().add(principal.getLblPosicion(), constraints);
        constraints.anchor = GridBagConstraints.WEST;

//        PanelExterno pnlExterno = new PanelExterno();
//        JScrollPane scrollpane = new JScrollPane(pnlExterno);
//        principal.setPnlExterno(pnlExterno);
//        principal.getPnlExterno().setBorder(BorderFactory.createEtchedBorder());
//        principal.getPnlExterno().setBackground(new Color(240, 240, 240));
//        modificaConstraints(constraints, 0, 6, 2, 1,
//                GridBagConstraints.BOTH, 1.0, 0.30);
//        principal.getContentPane().add(principal.getPnlExterno(), constraints);

        principal.setDefaultCloseOperation(Ventana.EXIT_ON_CLOSE);
        principal.setExtendedState(JFrame.MAXIMIZED_BOTH);
//        principal.setFchGuardar(new JFileChooser());

        principal.getEscMapa().addMouseListener(new miPopupListener());

        principal.setVisible(true);
        
        principal.createBufferStrategy(4);
        bf = principal.getBufferStrategy();
        principal.repaint();
    }

    public void actualizaBackBuffer() {
        //principal.getLblEstado().setText(generaCadena());
        principal.dibujar(bf);
    }

//    private String generaCadena() {
//        String strAux;
//        strAux = "Poblacion: " + ciudad.getHabitantesTotales() + "/" + ciudad.getHabitantesSoportables();
//        strAux += "\t Dinero:" + ciudad.getDineroActual();
//        return strAux;
//    }

    public Ventana getPrincipal() {
        return principal;
    }

    public void setPrincipal(Ventana principal) {
        this.principal = principal;
    }

//    public Ciudad getCiudad() {
//        return ciudad;
//    }
//
//    public void setCiudad(Ciudad ciudad) {
//        this.ciudad = ciudad;
//    }
//
//    public HiloAnimacion getHanim() {
//        return hanim;
//    }
//
//    public void setHanim(HiloAnimacion hanim) {
//        this.hanim = hanim;
//    }

}
